The rapid advances in hardware and software technologies facilitate not only improved business capabilities but also user entertainment. In the area of video or graphics subsystems, the interplay between software advances and hardware advances is driving graphics rendering to new levels. One particular driver in this area is computer games where users are demanding more realistic rendering. This is demonstrated by the fact that online and offline computer games account for a growing multi-billion dollar a year business. In either case, vendors continue to seek ways in which to provide faster and more realistic graphics.
One problem associated with the drawing of a realistic scene is transparent objects. In the natural world there are very few things that truly are transparent. However, in the virtual world degrees of transparency must be addressed to provide the desired effect. The problem of rendering transparent objects is related to the order of the contributions provided by each transparent surface. The contributions of surfaces must be sorted based on the distance to the viewer in order to get correct output. To further complicate the problem, this ordering must be maintained at the smallest granularity at which the image is resolved (e.g., at the pixel level with no anti-aliasing or at the sample level with anti-aliasing). It is possible to sort at the primitive level if no primitive intersections are allowed, but that is a difficult restriction to maintain.
The transparency solution can be considered in the critical path for performance of any rendering application. Good performance is critical for any solution. In addition, the performance needs to be good at both the current content and for new higher visual depth scenes. Memory bandwidth and memory consumption are primary factors in determining the final performance of a solution.
A number of conventional methods exist for providing order independent transparency and anti-aliasing processing via an A-buffer approach. However, for hardware solutions, most either used fixed storage per pixel or a linked-list approach. Fixed storage uses an inordinate amount of memory, and much of that memory goes unused. Additionally, a linked-list or related approach is slow due to the amount of memory touched for each access.
Thus, an arbitrarily sized output is a problem for transparency solutions that store all visible fragments. If failure cases can happen on low end parts or intermittently on mid/high end parts, a large support cost is incurred by the developers. Generally, mechanisms should be available that provide easily definable solutions for efficiently rending graphics.